/*
 * @Author: ૮₍ ˙О˙₎ა
 * @Date: 2023-08-09 14:20:58
 */
import axios, { Method } from "axios";
import { message } from "antd";

// 创建一个新的axios，就是返回值request
// request的用法和axios用法基本一致
const instance = axios.create({
  // 公共配置，将来发送请求会自动添加
  // 发送请求的前缀：将来所有通过request发送的请求，会在请求地址前面自动添加baseURL
  // react脚手架会根据开发/生产自动加载.env.xxx的环境变量
  // 通过 process.env.xxx 读取加载的环境变量的值
  // 开发模式下：process.env.REACT_APP_API --> /dev-api
  baseURL: '/api', // 请求地址：baseURL + url
  timeout: 5000, // 请求超时时间：一旦请求超过10s还未完成，就会自动中断请求
  // headers: {},
});

// 请求拦截器函数：发送请求之前触发的函数
instance.interceptors.request.use((config) => {
  
  return config;
});

// 响应拦截器函数：得到响应之后触发的函数
instance.interceptors.response.use(
  (response) => {
    const res=response.data
    

    
    return res
  },
  (error) => {
    // 请求失败
    message.error(error.message);
    return Promise.reject(error);
  }
);

export interface IReqDataRes<T> {
  code: number
  data: T
  message: string
  success: boolean
}

/**
 * @description: 二次封装axios请求
 * @return {*}
 * @param {*} T
 */
const http = <T>(url: string, method: Method, data?: unknown) => {
  const newMeThod = method.toLocaleUpperCase()
  
  return instance.request<any, IReqDataRes<T>>({
    url,
    method: newMeThod,
    params: newMeThod === 'GET' ? data : {},
    data: newMeThod === 'POST' || newMeThod === 'PUT' || newMeThod === 'DELETE' ? data : {}
  })
}
export { instance, http }

